#include "esp_attr.h"
#include <stdio.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "geminai_para.h"
#include "geminai_mqtt_cache.h"
#include "geminai_log.h"


//输出IO
#define RLY_DF          9   //除霜风机
#define RLY_FANS        10  //风机
#define RLY_COMP        11  //压机
#define POW24V_EN       14  //视觉模块使能
#define UART1_DE        16  //485接收发送控制
#define POW4G_EN        21  //4g使能
#define BAT_EN          47  //电池使能（测量电池电压时，先拉低，测量完成后拉高）
#define POW3V3_EN       48  //所有的外设供电

#define RLY_DF_ON  gpio_set_level(RLY_DF, 1)
#define RLY_DF_OFF gpio_set_level(RLY_DF, 0)
#define RLY_DF_GET gpio_get_level(RLY_DF)

#define RLY_FANS_ON  gpio_set_level(RLY_FANS, 1)
#define RLY_FANS_OFF gpio_set_level(RLY_FANS, 0)
#define RLY_FANS_GET gpio_get_level(RLY_FANS)

#define RLY_COMP_ON  gpio_set_level(RLY_COMP, 1)
#define RLY_COMP_OFF gpio_set_level(RLY_COMP, 0)
#define RLY_COMP_GET gpio_get_level(RLY_COMP)

#define POW24V_EN_ON  gpio_set_level(POW24V_EN, 1)
#define POW24V_EN_OFF gpio_set_level(POW24V_EN, 0)
#define POW24V_EN_GET gpio_get_level(POW24V_EN)

#define RS485_Low  gpio_set_level(UART1_DE, 0)//recv
#define RS485_High gpio_set_level(UART1_DE, 1)//send
#define RS485_GET  gpio_get_level(UART1_DE)

#define POW4G_EN_ON  gpio_set_level(POW4G_EN, 1)
#define POW4G_EN_OFF gpio_set_level(POW4G_EN, 0)
#define POW4G_EN_GET gpio_get_level(POW4G_EN)

#define BAT_EN_ON  gpio_set_level(BAT_EN, 1)
#define BAT_EN_OFF gpio_set_level(BAT_EN, 0)
#define BAT_EN_GET gpio_get_level(BAT_EN)

#define POW3V3_EN_ON  gpio_set_level(POW3V3_EN, 1)
#define POW3V3_EN_OFF gpio_set_level(POW3V3_EN, 0)
#define POW3V3_EN_GET gpio_get_level(POW3V3_EN)

//输入IO
#define GPIO_DOOR   33  //门磁开关
#define SW_10G      39  //雷达
#define SW_COOL     40  //制冷开关
#define SW_LIGHT    41  //灯光开关

//获取引脚电平
#define SW_LIGHT_read  gpio_get_level(SW_LIGHT) 
#define SW_COOL_read   gpio_get_level(SW_COOL)
#define SW_10G_read    gpio_get_level(SW_10G)
#define GPIO_DOOR_read gpio_get_level(GPIO_DOOR)

//IO初始化函数
void POW4G_EN_Init();
void POW24V_EN_Init();
void BAT_EN_Init();
void POW3V3_EN_Init();
void RLY_COMP_Init();
void RLY_FANS_Init();
void RLY_DF_Init();
void SW_LIGHT_Init();
void SW_COOL_Init();
void SW_10G_Init();
void GPIO_DOOR_Init();
void UART1_DE_Init();
void All_gpio_init();
void All_gpio_down();